//package com.juyu.miliao.scheduler.service;
//
//import java.awt.image.BufferedImage;
//import java.io.InputStream;
//import java.net.HttpURLConnection;
//import java.net.URL;
//import java.text.SimpleDateFormat;
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.IntStream;
//
//import javax.annotation.Resource;
//import javax.imageio.ImageIO;
//
//import org.apache.commons.codec.digest.DigestUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Component;
//
//import com.juyu.miliao.common.netease.NetEaseCloudUserService;
//import com.juyu.miliao.scheduler.cache.AppkeyCache;
//import com.juyu.miliao.scheduler.cache.HostMessageCache;
//import com.juyu.miliao.scheduler.dao.mysql.UserInfoDao;
//import com.juyu.miliao.scheduler.domin.HostMessage;
//import com.juyu.miliao.scheduler.domin.User;
//
//import net.sf.json.JSONObject;
//
///**
// * 用户登录 向用户推送消息定时任务
// *
// * @author wbf 2018年7月9日
// */
//@Component
//public class UserMessageService {
//	@Resource
//	private StringRedisTemplate stringRedisTemplate;
//	@Resource
//	private UserInfoDao userInfoDao;
//
//	private final Logger logger = LoggerFactory.getLogger(UserMessageService.class);
//
//	// 用户登录1分钟后发送一半消息
//	@Scheduled(fixedDelay = 1000 * 30, initialDelay = 1000 * 15)
//	public void userMessageScheduledOne() throws Exception {
//		String nowDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//		logger.info("定时任务FirstUserMessage开始：time={}", nowDateTime);
//		Map<Object, Object> map = stringRedisTemplate.opsForHash().entries("userMessageScheduledOne");
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//		Date date = sdf.parse(nowDateTime);
//		map.forEach((key, value) -> {
//			Date userDate = null;
//			try {
//				userDate = sdf.parse(value.toString());
//			} catch (Exception e) {
//				logger.error("定时任务userMessageScheduledOne出错-时间格式：error={}", e);
//			}
//			if (userDate.getTime() <= date.getTime()) {
//				int wordsNum = 0; // 要发送文字总数
//				int pictureNum = 0;// 要发送文字图片总数
//				wordsNum = Integer.parseInt(AppkeyCache.INSTANCE.getAppkey("missageOneWords").getValue());
//				pictureNum = Integer.parseInt(AppkeyCache.INSTANCE.getAppkey("missageOnePicture").getValue());
//				// 开始发送文字/图片数量的一半推送
//				int nowWordsNum = wordsNum / 2;
//				int nowPictureNum = pictureNum / 2;
//				// 获取随机主播 （图片+文字）/2
//				List<Integer> userIds = new ArrayList<>();
//				List<User> userList = userInfoDao.getUserListRand(nowWordsNum + nowPictureNum, userIds);
//				// 发送图片主播id
//				List<User> picUserList = userList.subList(0, nowPictureNum);
//				// 发送文字主播id
//				userList = userList.subList(nowPictureNum, nowWordsNum + nowPictureNum);
//				// 获取消息列表
//				List<HostMessage> wordList = HostMessageCache.INSTANCE.getHostMessageList(1);
//				List<HostMessage> picList = HostMessageCache.INSTANCE.getHostMessageList(2);
//
//				// 发送文字
//				for (int i = 0; i < nowWordsNum; i++) {
//					JSONObject body = new JSONObject();
//					body.put("msg", wordList.get(i).getMessage());
//					try {
//						String temp = NetEaseCloudUserService.getSendMsg(Integer.parseInt(key + ""),
//								userList.get(i).getUserId(), 0, body.toString());
//						if (!temp.substring(temp.indexOf("code") + 6, temp.indexOf("code") + 9).equals("200"))
//							logger.error("发送普通消息异常-云信：userId={},message={}", key, temp);
//					} catch (Exception e) {
//						logger.error("发送普通消息异常：userId={},error={}", key, e);
//					}
//				}
//				// 发送图片
//				for (int i = 0; i < nowPictureNum; i++) {
//					JSONObject body = new JSONObject();
//					body.put("name", System.currentTimeMillis());// 图片name
//					try {
//						URL url = new URL(picList.get(i).getMessage());
//						HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//						InputStream in = conn.getInputStream();
//						BufferedImage sourceImg = ImageIO.read(in);
//						int w = sourceImg.getWidth();
//						int h = sourceImg.getHeight();
//						body.put("md5", DigestUtils.md5Hex(in));// 图片文件md5
//						body.put("url", picList.get(i).getMessage());
//						String[] temp = picList.get(i).getMessage().split("\\.");
//						body.put("ext", temp[temp.length - 1]);
//						body.put("w", w);
//						body.put("h", h);
//						// 根据响应获取文件大小
//						body.put("size", conn.getContentLength());
//					} catch (Exception e1) {
//						logger.error("发送普通消息异常-md5转换错误：userId={},error={}", key, e1);
//					}
//					try {
//						String temp = NetEaseCloudUserService.getSendMsg(Integer.parseInt(key + ""),
//								picUserList.get(i).getUserId(), 1, body.toString());
//						if (!temp.substring(temp.indexOf("code") + 6, temp.indexOf("code") + 9).equals("200"))
//							logger.error("发送普通消息异常-云信：userId={},message={}", key, temp);
//					} catch (Exception e) {
//						logger.error("发送普通消息异常-系统：userId={},error={}", key, e);
//					}
//				}
//
//				// 删除redis数据
//				stringRedisTemplate.opsForHash().delete("userMessageScheduledOne", key);
//				// 增加 十秒一次普通消息推送redis
//				JSONObject commonJson = new JSONObject();
//				commonJson.put("wordsNum", wordsNum - nowWordsNum);
//				commonJson.put("pictureNum", pictureNum - nowPictureNum);
//				stringRedisTemplate.opsForHash().put("userMessageLoopCommonOne", key + "", commonJson.toString());
//				// 增加视频推送redis
//				JSONObject videoJson = new JSONObject();
//				videoJson.put("num", AppkeyCache.INSTANCE.getAppkey("missageOneVideo").getValue());
//				videoJson.put("type", 1);
//				stringRedisTemplate.opsForHash().put("userMessageVideo", key, videoJson.toString());
//			}
//		});
//		logger.info("定时任务userMessageScheduledOne结束：time={}",
//				LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//	}
//
//	// 用户登录15分钟后发送一半消息
//	@Scheduled(fixedDelay = 1000 * 60, initialDelay = 1000 * 15)
//	public void userMessageScheduledFifteen() throws Exception {
//		String nowDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//		logger.info("定时任务FirstUserMessage开始：time={}", nowDateTime);
//		Map<Object, Object> map = stringRedisTemplate.opsForHash().entries("userMessageScheduledFifteen");
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//		Date date = sdf.parse(nowDateTime);
//		map.forEach((key, value) -> {
//			Date userDate = null;
//			try {
//				userDate = sdf.parse(value.toString());
//			} catch (Exception e) {
//				logger.error("定时任务FirstUserMessage出错-时间格式：error={}", e);
//			}
//			if (userDate.getTime() <= date.getTime()) {
//				int wordsNum = 0; // 要发送文字总数
//				int pictureNum = 0;// 要发送文字图片总数
//				wordsNum = Integer.parseInt(AppkeyCache.INSTANCE.getAppkey("missageFifteenWords").getValue());
//				pictureNum = Integer.parseInt(AppkeyCache.INSTANCE.getAppkey("missageFifteenPicture").getValue());
//				// 开始发送文字/图片数量的一半推送
//				int nowWordsNum = wordsNum / 2;
//				int nowPictureNum = pictureNum / 2;
//				// 十五分钟推送
//				int wordsNumCount = Integer.parseInt(AppkeyCache.INSTANCE.getAppkey("missageOneWords").getValue());
//				wordsNumCount = wordsNumCount + wordsNum;
//				int pictureNumCount = Integer.parseInt(AppkeyCache.INSTANCE.getAppkey("missageOnePicture").getValue());
//				pictureNumCount = pictureNumCount + pictureNum;
//				// 获取随机主播 （图片+文字）/2
//				List<Integer> userIds = new ArrayList<>();
//				List<User> userList = userInfoDao.getUserListRand(nowWordsNum + nowPictureNum, userIds);
//				// 发送图片主播id
//				List<User> picUserList = userList.subList(0, nowPictureNum);
//				// 发送文字主播id
//				userList = userList.subList(nowPictureNum, nowWordsNum + nowPictureNum);
//
//				List<HostMessage> wordList = HostMessageCache.INSTANCE.getHostMessageList(1);
//				List<HostMessage> picList = HostMessageCache.INSTANCE.getHostMessageList(2);
//
//				// 发送文字
//				for (int i = nowWordsNum; i > 0; i--) {
//					JSONObject body = new JSONObject();
//					body.put("msg", wordList.get(wordsNum - i).getMessage());
//					try {
//						String temp = NetEaseCloudUserService.getSendMsg(Integer.parseInt(key + ""),
//								userList.get(i-1).getUserId(), 0, body.toString());
//						if (!temp.substring(temp.indexOf("code") + 6, temp.indexOf("code") + 9).equals("200"))
//							logger.error("发送普通消息异常-云信：userId={},message={}", key, temp);
//					} catch (Exception e) {
//						logger.error("发送普通消息异常：userId={},error={}", key, e);
//					}
//				}
//				// 发送图片
//				for (int i = nowPictureNum; i > 0; i--) {
//					JSONObject body = new JSONObject();
//					body.put("name", System.currentTimeMillis());// 图片name
//					try {
//						URL url = new URL(picList.get(pictureNum - i).getMessage());
//						HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//						InputStream in = conn.getInputStream();
//						BufferedImage sourceImg = ImageIO.read(in);
//						int w = sourceImg.getWidth();
//						int h = sourceImg.getHeight();
//						body.put("md5", DigestUtils.md5Hex(in));// 图片文件md5
//						body.put("url", picList.get(pictureNum - i).getMessage());
//						String[] temp = picList.get(pictureNum - i).getMessage().split("\\.");
//						body.put("ext", temp[temp.length - 1]);
//						body.put("w", w);
//						body.put("h", h);
//						// 根据响应获取文件大小
//						body.put("size", conn.getContentLength());
//					} catch (Exception e1) {
//						logger.error("发送普通消息异常-md5转换错误：userId={},error={}", key, e1);
//					}
//					try {
//						String temp = NetEaseCloudUserService.getSendMsg(Integer.parseInt(key + ""),
//								picUserList.get(i-1).getUserId(), 1, body.toString());
//						if (!temp.substring(temp.indexOf("code") + 6, temp.indexOf("code") + 9).equals("200"))
//							logger.error("发送普通消息异常-云信：userId={},message={}", key, temp);
//					} catch (Exception e) {
//						logger.error("发送普通消息异常-系统：userId={},error={}", key, e);
//					}
//				}
//
//				// 删除redis数据
//				stringRedisTemplate.opsForHash().delete("userMessageScheduledFifteen", key);
//				// 增加 十秒一次普通消息推送redis
//				JSONObject commonJson = new JSONObject();
//				commonJson.put("wordsNum", wordsNum - nowWordsNum);
//				commonJson.put("pictureNum", pictureNum - nowPictureNum);
//				stringRedisTemplate.opsForHash().put("userMessageLoopCommonFifteen", key + "", commonJson.toString());
//				// 增加视频推送redis
//				JSONObject videoJson = new JSONObject();
//				videoJson.put("num", AppkeyCache.INSTANCE.getAppkey("missageFifteenVideo").getValue());
//				videoJson.put("type", 2);
//				stringRedisTemplate.opsForHash().put("userMessageVideo", key, videoJson.toString());
//			}
//		});
//		logger.info("定时任务userMessageScheduledFifteen结束：time={}",
//				LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
//	}
//
//}
